package ar.uade.fain.ai.tpo.model;

import java.util.HashMap;
import java.util.Map;

import ar.uade.fain.ai.tpo.model.exceptions.SinStockException;



public class Stock {
	
	private Map<Producto, Integer> disponibles;

	public Stock() {
		super();
		this.disponibles = new HashMap<Producto, Integer>();
	}

	
	public void descontar(Ingrediente ingrediente) throws SinStockException {
		Producto producto = ingrediente.getProducto();
		if (producto != null){
			int  cantAnterior = getDisponibles().get(producto);
			int cantNueva = (int) (cantAnterior - ingrediente.getCantidad());
			if (cantNueva >=0){
				getDisponibles().put(producto, cantNueva);
			}
			else{
				throw new SinStockException(producto);
			}
		}
		else{
			throw new SinStockException(producto);
		}
	}

	public boolean chequear(Ingrediente ingrediente) {
		if (disponibles.containsKey(ingrediente.getProducto())){
			return (getDisponibles().get(ingrediente.getProducto())>=ingrediente.getCantidad()) ;
		}
		return false;
	}
	
	public void agregar(Producto producto, int cantidad){
		if (cantidad>0){
			if (disponibles.containsKey(producto)){
				int cantExistente = disponibles.get(producto);
				disponibles.put(producto,cantExistente+cantidad);
			}
			else{
				disponibles.put(producto, cantidad);
			}
		}else throw new IllegalArgumentException(
				"No se puede agregar una cantidad: "+cantidad);
	}

	public void descontar(Producto producto, int cantidad){
		if (cantidad>0){
			if (disponibles.containsKey(producto)){
				int cantExistente = disponibles.get(producto);
				disponibles.put(producto,cantExistente-cantidad);
			}
		}else throw new IllegalArgumentException("No se puede agregar una cantidad: "+cantidad);
	}

	public Map<Producto, Integer> getDisponibles() {
		return disponibles;
	}
	public void setDisponibles(Map<Producto, Integer> disponibles) {
		this.disponibles = disponibles;
	}
}
